package com.ruoyi.system.media;

/**
 * OBU DFEF04内卡0015文件(发行基本数据文件))编码信息
 * 20个字节
 */
public class Ucard0015Ed20 {
    public static final int MSG_LEN = 20;

    /**
     * 发卡标识(01-08,8,cn)
     * 格式：AAAAAAAA + BBBB + CC + DD
     * AAAAAAAA ：省级行政区划代码，2 个汉字（4 个字节）；
     * BBBB ：运营商标识，压缩BCD码，河南为0x4101；
     * CC ：保留；DD ：密钥分散标识，取值为 01。
     * 样例：0xBAD3C4CF41010001
     */
    public byte[] cIssData = new byte[8];

    /**
     * 卡片类型(09-09,1,n)22-储值卡；23-记账卡
     */
    public byte[] nCardCls = new byte[1];

    /**
     * 卡片版本(10-10,1,cn)统一为0x40
     */
    public byte[] nCardVsn = new byte[1];

    /**
     * 卡片网络(11-12,2,cn)0x4101
     */
    public byte[] cNetWork = new byte[2];

    /**
     * 卡片内部编号(13-20,8,cn)
     * 由1 字节“初始化年份”、1 字节“初始化星期”、1 字节“卡片类型”和5字节“卡片序列号”组成
     */
    public byte[] cCardsId = new byte[8];

    /**
     * 信息编码
     *
     * @param dd
     * @return
     */
    public static Ucard0015Ed20 encoded(Ucard0015Dd20 dd) {
        Ucard0015Ed20 ed = new Ucard0015Ed20();
        ed.cIssData = ZTools.hex2bin(8, dd.cIssData);
        ed.nCardCls = ZTools.int2bin(1, dd.nCardCls);
        ed.nCardVsn = ZTools.hex2bin(1, dd.nCardVsn);
        ed.cNetWork = ZTools.hex2bin(2, dd.cNetWork);
        ed.cCardsId = ZTools.hex2bin(8, dd.cCardsId);

        return ed;
    }

    public byte[] toBytes() {
        byte[] ret = ZTools.sbMerger(cIssData, nCardCls, nCardVsn, cNetWork, cCardsId);
        return ret;
    }

    public String toHexStr() {
        return ZTools.bin2hex(toBytes());
    }

}
